object Test extends App {
    trait A {
     def f[T[_]](x : T[Int]) : T[Any]
    }

    class B extends A {
     def f[T[+_]](x : T[Int]) : T[Any] = x
    }

    class P[Y](var y : Y)

    val p = new P(1)
    val palias = (new B():A).f[P](p)
    palias.y = "hello"
    val z: Int = p.y
}
